import { isPlainObject, isArray } from 'lodash-es'
class CommonModel {
    getList(form, page) {
        // 表单过滤参数和页数参数合并
        const data = { ...form, ...page }
        return this.api.records(data)
    }

    // 新增或者更新
    saveOrUpdate(data) {
        return this.api.saveOrUpdate(data)
    }

    delete(data) {
        return this.api.delete(data)
    }

    detail(data, filter) {
        return this.api.detail(data).then(res => {
            if (filter) {
                const result = this.transformNull(res)
                return result
            }
            return res
        })
    }

    // 提交
    submit(data) {
        return this.api.submit(data)
    }

    // 撤回
    recall(data) {
        return this.api.recall(data)
    }

    // 中止
    stop(data) {
        return this.api.stop(data)
    }

    // 启动
    start(data) {
        return this.api.start(data)
    }

    // 添加
    add(data) {
        return this.api.add(data)
    }

    // 名称唯一性验证
    uniqueCheck(data) {
        return this.api.uniqueCheck(data)
    }

    // 导入文件
    import(file) {
        const form = new FormData()
        form.append('file', file)
        return this.api.import(form)
    }

    // 对空值设置默认值为'-'
    transformNull(obj) {
        if (isPlainObject(obj)) {
            for (const key in obj) {
                if (obj[key] === null || obj[key] === undefined) {
                    obj[key] = '-'
                } else {
                    this.transformNull(obj[key])
                }
            }
        } else if (isArray(obj)) {
            obj.forEach(item => {
                this.transformNull(item)
            })
        }
        return obj
    }

    // 根据桩号获取经纬度
    async getLngLatByStake(data) {
        const res = await this.api.getLngLatByStake(data)
        return res
    }
}

export default CommonModel
